package zoran.wang.tree;

/**
 * 二叉树的递归遍历，包含前中后序三种方式
 *
 * @author wangzhuo
 * @time 2025-04-10-17:45
 */
public class RecursionTraversal {

    // 基础模板
    public void traversal(TreeNode root) {
        if (root == null) {
            return;
        }

        // 前序遍历
        traversal(root.left);

        // 中序遍历
        traversal(root.right);

        // 后序遍历
    }

    // 前序遍历定义：当遍历一个结点 root 时，先输出 root ，再依次递归遍历它的左右结点
    public void preorderTraversal(TreeNode root) {
        if (root == null) {
            return;
        }

        // 前序遍历
        System.out.println(root.val);

        preorderTraversal(root.left);

        preorderTraversal(root.right);
    }

    // 中序遍历定义：当遍历一个结点 root 时，先递归遍历它的左节点，输出 root，再递归遍历它的右节点
    public void midOrderTraversal(TreeNode root) {
        if (root == null) {
            return;
        }

        midOrderTraversal(root.left);

        // 中序遍历
        System.out.println(root.val);

        midOrderTraversal(root.right);
    }

    // 后序遍历定义：当遍历一个结点 root 时，先依次递归遍历它的左右结点，再输出 root
    public void postorderTraversal(TreeNode root) {
        if (root == null) {
            return;
        }

        postorderTraversal(root.left);

        postorderTraversal(root.right);

        // 后序遍历
        System.out.println(root.val);
    }
}
